#ifndef EGG_BASE_H
#define EGG_BASE_H

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <memory>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <xutility>
#include <stdlib.h>
#include <string.h>
#include <functional>
#include <unordered_set>
#include <unordered_map>
#include <glm/glm.hpp>
#include <glm/ext.hpp>

namespace egg {
    using namespace std;

    typedef int int32;
    typedef float float32;
    typedef double float64;
    typedef unsigned char byte;
    typedef unsigned char bitfield8;
    typedef unsigned char uchar;
    typedef unsigned char uint8;
    typedef unsigned int uint32;
    typedef unsigned int bitfield32;
    typedef unsigned short uint16;
    typedef unsigned short bitfield16;
    typedef unsigned long long uint64;

    typedef glm::vec2 vec2;
    typedef glm::vec3 vec3;
    typedef glm::vec4 vec4;
    typedef glm::mat2 mat2;
    typedef glm::mat3 mat3;
    typedef glm::mat4 mat4;
    typedef glm::mat2x3 mat2x3;
    typedef glm::quat quat;

    enum PixelFormat{
        PF_R8G8B8A8=0,
        PF_R16G16F,
        PF_R8G8B8,
        PF_L8A8,
        PF_L8,
        PF_R32F,
        PF_R16G16B16F,
        PF_R32G32B32F,
        PF_R16G16B16A16F,
        PF_R32G32B32A32F,
        PF_Depth32,
        PF_Depth24Stencil8,
    };

}

#endif